/*
    Copyright is LuoYuShun to 2022-2022
*/
package cn.com.laya.service.fourdemo.bean;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 描述
 *
 * @author LuoYuShun
 * @since 2022-11-10
 */
@Data
@Accessors(chain = true)
public class ResultResponse<T> {
    /**
     * 编码
     */
    private String code;

    /**
     * 信息
     */
    private String msg;

    /**
     * 返回的数据
     */
    private T result;

    /**
     * 返回成功的信息
     *
     * @param result 结果数据
     * @param <T> 泛型
     * @return 返回结果
     */
    public static <T> ResultResponse<T> success(T result) {
        return new ResultResponse<T>().setResult(result).setCode("200");
    }

    /**
     * 返回成功的信息
     *
     * @param result 返回信息
     * @param msg 返回提示的信息
     * @param <T> 泛型
     * @return 返回返回的结果
     */
    public static <T> ResultResponse<T> success(T result, String msg) {
        return success(result).setMsg(msg);
    }

    /**
     * 返回成功的信息
     *
     * @param result 返回的结果
     * @param msg 提示信息
     * @param code 返回的编码
     * @param <T> 泛型
     * @return 返回信息
     */
    public static <T> ResultResponse<T> success(T result, String msg, String code) {
        return success(result, msg).setCode(code);
    }

    /**
     * 返回错误的信息
     *
     * @param error 错误信息
     * @param <T> 返回信息
     * @return 返回信息
     */
    public static <T> ResultResponse<T> error(T error) {
        return success(error).setCode("500").setMsg("程序处理错误");
    }

    public static <T> ResultResponse<T> authError(T error) {
        return success(error).setCode("403").setMsg("没有登录，请进行登录");
    }

    /**
     * 返回错误的信息
     *
     * @param error 错误信息
     * @param msg 返回的提示信息
     * @param <T> 泛型
     * @return 返回数据信息
     */
    public static <T> ResultResponse<T> error(T error, String msg) {
        return success(error, msg).setCode("500");
    }

    /**
     * 返回错误信息
     *
     * @param error 错误信息
     * @param msg 提示信息
     * @param code 编码
     * @param <T> 泛型
     * @return 返回值
     */
    public static <T> ResultResponse<T> error(T error, String msg, String code) {
        return success(error, msg, code);
    }
}
